// #include <stdio.h>
// #include <stdlib.h>
// #include <stdbool.h>
// #include <windows.h>
//
// // 节点结构体
// typedef struct Node {
//     int data;
//     struct Node* prev;
//     struct Node* next;
// } Node;
//
// // 双循环链表结构体
// typedef struct DoublyCircularList {
//     Node* head;
// } DoublyCircularList;
//
// // 初始化双循环链表（空链表时head指向自身）
// DoublyCircularList* createList() {
//     DoublyCircularList* list = (DoublyCircularList*)malloc(sizeof(DoublyCircularList));
//     list->head = NULL;
//     return list;
// }
//
// // 创建新节点
// Node* createNode(int data) {
//     Node* newNode = (Node*)malloc(sizeof(Node));
//     if (!newNode) {
//         perror("Memory allocation failed");
//         exit(EXIT_FAILURE);
//     }
//     newNode->data = data;
//     newNode->prev = newNode;
//     newNode->next = newNode; // 初始化时自环
//     return newNode;
// }
//
// // 插入节点到链表尾部
// void insert(DoublyCircularList* list, int data) {
//     Node* newNode = createNode(data);
//
//     if (list->head == NULL) {
//         list->head = newNode;
//         return;
//     }
//
//     Node* last = list->head->prev; // 获取尾节点
//
//     // 连接新节点
//     newNode->next = list->head;
//     newNode->prev = last;
//
//     // 更新相邻节点指针
//     last->next = newNode;
//     list->head->prev = newNode;
// }
//
// // 删除指定数据的节点
// void deleteNode(DoublyCircularList* list, int key) {
//     if (list->head == NULL) return;
//
//     Node* current = list->head;
//     do {
//         if (current->data == key) {
//             // 处理只有一个节点的情况
//             if (current->next == current) {
//                 list->head = NULL;
//             } else {
//                 current->prev->next = current->next;
//                 current->next->prev = current->prev;
//                 if (current == list->head) {
//                     list->head = current->next;
//                 }
//             }
//             free(current);
//             return;
//         }
//         current = current->next;
//     } while (current != list->head);
// }
//
// // 前向遍历
// void forwardTraverse(DoublyCircularList* list) {
//     if (list->head == NULL) {
//         printf("Empty list\n");
//         return;
//     }
//
//     Node* current = list->head;
//     do {
//         printf("%d ", current->data);
//         current = current->next;
//     } while (current != list->head);
//     printf("\n");
// }
//
// // 后向遍历
// void backwardTraverse(DoublyCircularList* list) {
//     if (list->head == NULL) {
//         printf("Empty list\n");
//         return;
//     }
//
//     Node* current = list->head->prev; // 从尾节点开始
//     do {
//         printf("%d ", current->data);
//         current = current->prev;
//     } while (current != list->head->prev);
//     printf("\n");
// }
//
// // 查找节点
// Node* find(DoublyCircularList* list, int key) {
//     if (list->head == NULL) return NULL;
//
//     Node* current = list->head;
//     do {
//         if (current->data == key) {
//             return current;
//         }
//         current = current->next;
//     } while (current != list->head);
//
//     return NULL;
// }
//
// // 检查链表是否对称
// bool isSymmetric(DoublyCircularList* list) {
//     if (list->head == NULL) return true;
//
//     Node* front = list->head;
//     Node* back = list->head->prev; // 尾节点
//
//     while (front != back && front->next != back) {
//         if (front->data != back->data) {
//             return false;
//         }
//         front = front->next;
//         back = back->prev;
//     }
//
//     // 处理奇数个节点的情况
//     if (front == back || front->data == back->data) {
//         return true;
//     }
//
//     return false;
// }
//
// // 释放整个链表
// void freeList(DoublyCircularList* list) {
//     if (list->head == NULL) {
//         free(list);
//         return;
//     }
//
//     Node* current = list->head;
//     Node* temp;
//
//     do {
//         temp = current->next;
//         free(current);
//         current = temp;
//     } while (current != list->head);
//
//     free(list);
// }
//
// //判断对称
// bool DDD(DoublyCircularList* L) {
//     if(L==NULL||L->head==NULL) {
//         return true;
//     }
//     Node* p=L->head;//首元素
//     Node* t=L->head->prev;//尾元素
//     do {
//         if(p->data!=t->data) {
//             return false;
//         }
//         if(p>t||p==t) {
//             break;
//         }
//         p=p->next;
//         t=t->prev;
//     }
//     while (true);
//     return true;
// }
//
// // 主函数测试
// int main(){
//     SetConsoleOutputCP(CP_UTF8);
//
//     DoublyCircularList* list = createList();
//
//     // 测试对称链表
//     insert(list, 1);
//     insert(list, 2);
//     insert(list, 3);
//     insert(list, 2);
//     insert(list, 1);
//
//     if(DDD(list)==true) {
//         printf("对称\n");
//     }else {
//         printf("不对称\n");
//     }
//
//     DoublyCircularList* L=createList();
//
//     insert(L,1);
//     insert(L,2);
//     insert(L,1);
//     insert(L,3);
//     insert(L,1);
//
//     if(DDD(L)==true) {
//         printf("对称\n");
//     }else {
//         printf("不对称\n");
//     }
//
//     freeList(list);
//     return 0;
// }